Cover1.jpg

Cover3.jpg

cover2.jpg

Question/ Problem We’re Addressing¶

Beginning in the 1950s, scholars have reflected on the lack of development in low and middle-income countries. This correlation between lower income and slower growth was originally suspected to be a factor of path dependence, where a lack of wealth in the 1800s and 1900s could lead to a lack of growth in the 21st century. However, the 1980s demonstrated that lower-income countries CAN experience rapid economic growth, by a factor of more than 10% per year. In particular, the “miracle growth” countries like China, Korea, and Japan, categorized as countries with sustained economic growth of more than 6% per year, inspired further research. Still, the majority of low-income nations remained low-income. Some glaring exceptions also stood out: countries endowed with natural resources which should catalyze growth and integration into the international economy. Often, the results were counterintuitive to logic. These countries, endowed with oil, natural gas, and other high-value-added resources, experienced slower economic growth than their high-income counterparts and their low-income neighbors. In 1993, Richard Auty coined the term resource curse to describe this phenomenon of lower economic growth in resource-abundant countries.

The resource curse was inspired by another similar phenomenon, the Dutch disease. The Dutch disease suggests that increased exports of natural resources instigated a decline in national production competitiveness and created conditions for recessions. Growing natural resource markets often correlate to weakened export markets of goods and services because tradable goods become less competitive as the country becomes less specialized in its non-resource goods. Particularly for countries in the fuel industry, these changes in specialization influence how competitive countries are in the international and create unfavorable conditions for economic growth. The resource curse expands this phenomenon to include economic stagnation and stunting of growth in sectors outside of the export market.

Our research aims to investigate this exact topic: How does the resource curse affect low-income economies and do natural resources induce economic stagnation?

Relevance¶

In 2012, the International Monetary Fund (IMF) categorized 51 nations as “resource-rich,” which account for a population of more than a billion people. A majority of these nations showed exhaustible natural resources account for at least 20% of fiscal revenue or 20% of exports. 29 of these nations have incomes that are low or lower middle class (Venables, 16). The 29 nations share the following traits: heavy reliance on natural resource wealth for taxation, exports, or both, inadequate savings rates, subpar economic performance, and highly variable resource income.

Resources account for one of the world’s largest sectors, accounting for nearly 20% of global production. The growing influence of oil and natural gas in recent decades also increased the influence of the resources market. However, with the growing influence of green energies and increased awareness of the dangers of mineral mining, there are increasing pressures to limit the natural resource industries. Moving into the future, shifts towards renewable energy sources could threaten the already rocky stability of resource markets. Understanding the potential influences in these markets can improve their transition into new markets and avoid the negative consequences of market shifts.

AD565699-.png

Explanation of Variables¶

  1. Export Centralization
    As a factor of the Dutch disease, a competitive advantage in natural resources prevents development in other export industries. The “competitive hypothesis” of the resource curse argues that specialization in the resource industry can subdue growth in more diversified and stable industries, thus preventing the overall growth of the economy (Mershed and Serino, 152). In the long term, the oversaturation of the labor market can create wage stagnation, lower GDP per capita, and lower standards of living. This combination of hyperspecialized industries and low wages can subdue economic growth, even when prices for natural resources are high.
    For this section, we will be observing what percent of the economy is employed by the natural resource industry by observing export percentages and the strucutre of the market. We will also be comparing natural resource rents to GDP per capita. If increased exports in the resource industries is negatively correlated with economic growth, this data would suggest that natural resources are detrimental to economic growth.
  1. Volatility of prices
    Most natural resources are roughly price inelastic on the supply and demand side, making the market highly vulnerable to small price changes. Changes in demand or supply shocks of all kinds can create large swings in prices that affect the market rapidly. As Michael Ross highlights, “the price of oil is more volatile than the price of 95 percent of all products sold in the United States,” making energy resources and other natural resources dangerous investments (Ross, 50). When governments rely on these revenues, economic growth is highly dependent on international prices. If prices dip, as they did in 2020 during the COVID pandemic, unexpected changes can create detrimental setbacks in growth. Goods and services are much less volatile, making them safer investments for growth. Resource-rich countries are therefore at the mercy of the international market for economic revenue and growth.
    We will tracking the trend lines between prices of oil and other nautral resources and economic growth. A positive correlation would indicate that economic growth is reliant on export prices. Thus, the volatility of the prices would be an impediment to economic growth.
  1. Resource Rent Revenues
    Overwhelmingly, a positive correlation exists between resource endowment and the size of government. These larger governments are also disproportionately dependent on revenues from natural resources, relying less on taxes than their resource-poor counterparts (Ross, 29). These disproportionately large governments rely on resource revenues and often fail to stabilize their economies due to shorter time horizons. The alternating periods of high prices tend to correlate with faster growth whereas low prices are associated with poor budgeting and high expenditures. Thus, governmental rents from resources can reveal where money is wasted or spent on consumption rather than investment.
    We will observe the trends between the size of government and economic growth. If there is a negative correlation, it would imply that government rents are detrimental to economic growth.

DAG¶

image.png

Data¶

The data necessary to assess our argument is compiled into six essential pieces of data:

  1. Statistics of resource endowment, detailing which resource each country has and the percent of exports

  2. GDP growth (and reductions) since exporting natural resources

  3. GDP per capita growth (and reductions) since exporting natural resources

  4. Prices of the natural resources before and after exportation

  5. Government rents from natural resources and their factor of total GDP/production

  6. Exports and Natural Resource Exports as a percentage of Total GDP

These six factors will demonstrate how the exchange of natural resources has changed in recent years and how developing economies have responded. As outlined above, our goal is to compare the data on the total production of natural resources to GDP per capita and total GDP growth to measure whether correlations exist between the two variables. The prices of the resources and the government rents will serve as control variables, to test whether extreme variation in GDP comes from internal or external factors. Due to a large number of confounding variables, we chose two external factors (price and government rents) to measure internal and external pressure on the market at all times.

Ultimately, these variables will address the factors of economic growth and demonstrate how resource-rich countries are at a unique disadvantage: despite an ingrained source for wealth, the countries are failing to develop or to grow.

Source of the Data¶

Most of our data can be sources from either OEC, the IMF, and the World Bank. However, some data is incomplete or unreliable. By using international market price and reported government rents of minerals, we hope to limit the effect of unreliable information.

Goals of Analysis¶

With our data, we intend to demonstrate four main correlations.

  1. Demonstrate a correlation between the percent of natural resource of exports and negative (OR neutral) GDP growth

Economic logic suggests that increase exports is linked to GDP growth. Therefore, a negative or neutral correlation between GDP growth and natural resource exports would illustrate some negative pressure from natural resources on GDP.

We plan to run regression to determine a correlation between natural resources as a percent of exports and GDP growth both average for countries and over time. We will also run a correlation between exports and GDP per capita growth. Ideally, both will demonstrate that peaks of prices are correlated with dips in GDP (and GDPPC) growth.

  1. Demonstrating negative (OR neutral) correlation between price of natural resources and GDP per capita growth

Again, economic logic would suggest that increasing GDP and increased natural resources exports would benefit the country's population. A negative or neutral correlation suggests that the increased revenues do not go to the people, but go somewhere else. If GDPPC is stagnant, this suggests limited development and growth.

We plan to run regression between prices of natural resources and GDP growth, as well as a regression for prices and GDP per capita growth. A negative correlation for both would support our hypothesis.

  1. Illustrating a correlation between natural resources as a percent of exports and government rents

Given that natural resource have a negative pressure on GDP growth and GDPPC is stagnant, where does that extra income go? Demonstrating a correlation between natural resource dependence and rents will illustrate that in some way, governments benefit from increase prices rather than the people. Therefore, government rents would be detrimental to development and growth.

We plan to run regressions between prices of natural resources and government rent growth, as well as a regression for resource endowment as a percentage of exports and rent growth. It is crucially import to note that we plan to use region as a control variable for these regressions. Regions that are more authoritarian than others (like the Middle East) will naturally have higher resource rents than democratic regions (like Europe or Africa). However, all regions should show negative trends. Therefore, by keeping region as a control variable, we will ensure that no data is skewed by government type or regional diversity.

and lastly,

  1. Illustrating the general correlation between high resource endowment and GDP growth over time

Using the data compiled previously, we hope to illustrate how resource endowment has an overwhelmingly negative impact of GDP growth and GDPPC growth. These variables demonstrate the various factors of the economy which are influenced by resource endowment and those which are negatively impacted.

Our outputs will be linear regression dynamic models and several R2 data analyses. Particularly for regressions over time, we intend to use linear regressions to show correlations between variables.

Country Selection

We chose our countries from the IMF(2012) Data set. These countries were chosen as "resource-rich" as natural resources account for 20%+ of exports or 20%+ of fiscal revenue.

This data set is organized by GNI per capita from lowest to highest. We excluded the rising natural resource exporters due to a lack of reliable information across several data banks. Information not included in the IMF Data Set was acquired through OEC data banks.
Based on some of our preliminary regression, some countries are still missing information despite using multiple resources. For the final project, we hope to find some of the missing data. Otherwise, we will note which countries are missing. We speculate the some of the missing data is either due to government secrecy or inaccessibility to information in smaller or more authoritarian countries.

In [381]:
#Importing
# Basic Packages
from __future__ import division
import os
from datetime import datetime

# Web & file access
import requests
import io

# Import display options for showing websites
from IPython.display import IFrame, HTML
# Plotting
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.ticker as mtick

%pylab --no-import-all
%matplotlib inline

import seaborn as sns
sns.set(rc={'figure.figsize':(11.7,8.27)})
sns.set_context("talk")

import plotly.express as px
import plotly.graph_objects as go

from plotnine import ggplot, geom_point, aes, stat_smooth, facet_wrap

# Data
import pandas as pd
import numpy as np
from pandas_datareader import data, wb

# GIS & maps
import geopandas as gpd
gp = gpd
import georasters as gr
import geoplot as gplt
import geoplot.crs as gcrs
import mapclassify as mc
import textwrap
import statsmodels.api as sm
from stargazer.stargazer import Stargazer, LineLocation

# Data Munging
from itertools import product, combinations
import difflib
import pycountry
import geocoder
from geonamescache.mappers import country
mapper = country(from_key='name', to_key='iso3')
mapper2 = country(from_key='iso3', to_key='iso')
mapper3 = country(from_key='iso3', to_key='name')

# Regressions & Stats
from scipy.stats import norm
import statsmodels.formula.api as smf
Using matplotlib backend: QtAgg
Populating the interactive namespace from numpy and matplotlib
In [382]:
countryprelimdata = (['Congo, Dem. Rep', 'COD', 'Minerals & Oil', 94, 'Dependent'],
                     ['Liberia', 'LBR', 'Gold/Iron Ore', 35, 'Medium'],
                     ['Niger', 'NER', 'Gold/Oil/Uranium', 79, 'Dependent'],
                     ['Guinea', 'GIN', 'Mining Products', 93, 'Dependent'],
                     ['Mali', 'MLI', 'Gold', 75, 'High'],
                     ['Chad', 'TCD', 'Oil', 89, 'Dependent'],
                     ['Mauritania', 'MRT', 'Iron Ore', 24, 'Medium'],
                     ['Lao PDR', 'LAO', 'Copper & Gold', 57, 'High'],
                     ['Zambia', 'ZMB', 'Copper', 72, 'High'],
                     ['Vietnam', 'VNM', 'Oil', 14, 'Low'],
                     ['Yemen', 'YEM', 'Oil', 82, 'Dependent'],
                     ['Nigeria', 'NGA', 'Oil', 97, 'Dependent'],
                     ['Cameroon', 'CMR', 'Oil', 47, 'Medium'],
                     ['Papua New Guinea', 'PNG', 'Oil/Copper/Gold', 77, 'Dependent'],
                     ['Sudan', 'SDN', 'Oil', 97, 'Dependent'],
                     ['Uzbekistan', 'UZB', 'Gold/Oil', 54, 'High'],
                     ['Cote d\'Ivoire', 'CIV', 'Oil/Gold', 17, 'Low'],
                     ['Bolivia', 'BOL', 'Oil', 74, 'High'],
                     ['Mongolia', 'MNG', 'Copper', 81, 'Dependent'],
                     ['Congo, Rep. of', 'COG', 'Oil', 90, 'Dependent'],
                     ['Iraq', 'IRQ', 'Oil', 99, 'Dependent'],
                     ['Indonesia', 'IDN', 'Oil', 10, 'Low'],
                     ['Timor Leste', 'TLS', 'Oil', 99, 'Dependent'],
                     ['Syrian Arab Republic', 'SYR', 'Oil', 36, 'Medium'],
                     ['Guyana', 'GUY', 'Gold & Bauxite', 42, 'Medium'],
                     ['Turkmenistan', 'TKM', 'Oil', 91, 'Dependent'],
                     ['Angola', 'AGO', 'Oil', 95, 'Dependent'],
                     ['Gabon', 'GAB', 'Oil', 83, 'Dependent'],
                     ['Equatorial Guinea', 'GNQ', 'Oil', 99, 'Dependent'],
                     ['Ecuador', 'ECU', 'Oil', 55, 'High'],
                     ['Albania', 'ALB', 'Oil', 10, 'Low'],
                     ['Algeria', 'DZA', 'Oil', 98, 'Dependent'],
                     ['South Africa', 'ZAF', 'Minerals', 55, 'High'],
                     ['Iran', 'AZE', 'Oil', 94, 'Dependent'],
                     ['Peru', 'PER', 'Minerals', 48, 'Medium'],
                     ['Brazil', 'BRA', 'Oil/Iron', 26, 'Low'],
                     ['Azerbaijan', 'AZE', 'Oil', 94, 'Dependent'],
                     ['Botswana', 'BWA', 'Diamonds', 66, 'High'],
                     ['Kazakhstan', 'KAZ', 'Oil', 60, 'High'],
                     ['Suriname', 'SUR', 'Minerals', 11, 'Low'],
                     ['Mexico', 'MEX', 'Oil', 15, 'Low'],
                     ['Russia', 'RUS', 'Oil/Minerals', 61, 'High'],
                     ['Chile', 'CHL', 'Copper', 53, 'High'],
                     ['Venezuela', 'VEN', 'Oil', 93, 'Dependent'],
                     ['Libya', 'LBY', 'Oil', 97, 'Dependent'],
                     ['Bahrain', 'BHR', 'Oil', 96, 'Dependent'],
                     ['Brunei Darussalam', 'BRN', 'Oil', 87, 'Dependent'],
                     ['Trinidad and Tobago', 'TTO', 'Oil', 38, 'Medium'],
                     ['Saudi Arabia', 'SAU', 'Oil', 87, 'Dependent'],
                     ['Oman', 'OMN', 'Oil', 73, 'High'],
                     ['United Arab Emirates', 'UAE', 'Oil', 41, 'Medium'],
                     ['Qatar', 'QAT', 'Oil', 88, 'Dependent'],
                     ['Norway', 'NOR', 'Oil', 62, 'High'])                             

cpd = pd.DataFrame(countryprelimdata, columns=['Country Name', 'iso3c', 'Exports', 'NR_TE', 'Dependence_Deg'])
#NR_TE represents natural resources as a percentage of total exports
In [383]:
# our list of countries and their primary exports
cpd
Out[383]:
Country Name iso3c Exports NR_TE Dependence_Deg
0 Congo, Dem. Rep COD Minerals & Oil 94 Dependent
1 Liberia LBR Gold/Iron Ore 35 Medium
2 Niger NER Gold/Oil/Uranium 79 Dependent
3 Guinea GIN Mining Products 93 Dependent
4 Mali MLI Gold 75 High
5 Chad TCD Oil 89 Dependent
6 Mauritania MRT Iron Ore 24 Medium
7 Lao PDR LAO Copper & Gold 57 High
8 Zambia ZMB Copper 72 High
9 Vietnam VNM Oil 14 Low
10 Yemen YEM Oil 82 Dependent
11 Nigeria NGA Oil 97 Dependent
12 Cameroon CMR Oil 47 Medium
13 Papua New Guinea PNG Oil/Copper/Gold 77 Dependent
14 Sudan SDN Oil 97 Dependent
15 Uzbekistan UZB Gold/Oil 54 High
16 Cote d'Ivoire CIV Oil/Gold 17 Low
17 Bolivia BOL Oil 74 High
18 Mongolia MNG Copper 81 Dependent
19 Congo, Rep. of COG Oil 90 Dependent
20 Iraq IRQ Oil 99 Dependent
21 Indonesia IDN Oil 10 Low
22 Timor Leste TLS Oil 99 Dependent
23 Syrian Arab Republic SYR Oil 36 Medium
24 Guyana GUY Gold & Bauxite 42 Medium
25 Turkmenistan TKM Oil 91 Dependent
26 Angola AGO Oil 95 Dependent
27 Gabon GAB Oil 83 Dependent
28 Equatorial Guinea GNQ Oil 99 Dependent
29 Ecuador ECU Oil 55 High
30 Albania ALB Oil 10 Low
31 Algeria DZA Oil 98 Dependent
32 South Africa ZAF Minerals 55 High
33 Iran AZE Oil 94 Dependent
34 Peru PER Minerals 48 Medium
35 Brazil BRA Oil/Iron 26 Low
36 Azerbaijan AZE Oil 94 Dependent
37 Botswana BWA Diamonds 66 High
38 Kazakhstan KAZ Oil 60 High
39 Suriname SUR Minerals 11 Low
40 Mexico MEX Oil 15 Low
41 Russia RUS Oil/Minerals 61 High
42 Chile CHL Copper 53 High
43 Venezuela VEN Oil 93 Dependent
44 Libya LBY Oil 97 Dependent
45 Bahrain BHR Oil 96 Dependent
46 Brunei Darussalam BRN Oil 87 Dependent
47 Trinidad and Tobago TTO Oil 38 Medium
48 Saudi Arabia SAU Oil 87 Dependent
49 Oman OMN Oil 73 High
50 United Arab Emirates UAE Oil 41 Medium
51 Qatar QAT Oil 88 Dependent
52 Norway NOR Oil 62 High
Compilation of Data Combining the IMF and OEC data set with the WDI data
In [384]:
# Paths
pathout = './data/'

if not os.path.exists(pathout):
    os.mkdir(pathout)
    
pathgraphs = './graphs/'
if not os.path.exists(pathgraphs):
    os.mkdir(pathgraphs)
In [385]:
currentYear = datetime.now().year
year = min(2020, currentYear-2)
In [386]:
wbcountries = wb.get_countries()
wbcountries = wbcountries.loc[wbcountries.region.isin(['Aggregates'])==False].reset_index(drop=True)
wbcountries['name'] = wbcountries.name.str.strip()
wbcountries['incomeLevel'] = wbcountries['incomeLevel'].str.title()
wbcountries.loc[wbcountries.iso3c=='VEN', 'incomeLevel'] = 'Upper Middle Income'
In [387]:
wdi_indicators = ['NY.GDP.MKTP.KD.ZG', 'NY.GDP.PCAP.KD.ZG', 'NY.GDP.PETR.RT.ZS', 'NE.EXP.GNFS.ZS', 'NY.GDP.TOTL.RT.ZS', 'NY.GDP.PCAP.PP.KD', 'EP.PMP.SGAS.CD']
In [388]:
pop_vars = wb.search(string='population')
pop_vars.head()
Out[388]:
id name unit source sourceNote sourceOrganization topics
24 1.1_ACCESS.ELECTRICITY.TOT Access to electricity (% of total population) Sustainable Energy for All Access to electricity is the percentage of pop... b'World Bank Global Electrification Database 2...
39 1.2_ACCESS.ELECTRICITY.RURAL Access to electricity (% of rural population) Sustainable Energy for All Access to electricity is the percentage of rur... b'World Bank Global Electrification Database 2...
40 1.3_ACCESS.ELECTRICITY.URBAN Access to electricity (% of urban population) Sustainable Energy for All Access to electricity is the percentage of tot... b'World Bank Global Electrification Database 2...
164 2.1_ACCESS.CFT.TOT Access to Clean Fuels and Technologies for coo... Sustainable Energy for All b''
195 3.11.01.01.popcen Population census Statistical Capacity Indicators Population censuses collect data on the size, ... b'World Bank Microdata library. Original sourc...
In [389]:
wdi = wb.download(indicator=wdi_indicators, country=wbcountries.iso2c.values, start=1950, end=year)
wdi = wdi.reset_index()
wdi['year'] = wdi.year.astype(int)
#GDP Per Capita
wdi['gdp_pc'] = wdi['NY.GDP.PCAP.PP.KD']
wdi['ln_gdppc']= wdi['gdp_pc'].apply(np.log)
#GDP growth annually
wdi['GDP_grow'] = wdi['NY.GDP.MKTP.KD.ZG']
wdi['ln_GDP_grow'] = wdi['NY.GDP.MKTP.KD.ZG'].apply(np.log)
#GPD Per Capita growth annually
wdi['GDPPC_grow'] = wdi['NY.GDP.PCAP.KD.ZG']
#Oil Rents as a percentage of GDP
wdi['OR'] = wdi['NY.GDP.PETR.RT.ZS']
wdi['ln_OR'] = wdi['OR'].apply(np.log)
#Natural resource rents as a percentage of GDP
wdi['NRR'] = wdi['NY.GDP.TOTL.RT.ZS']
wdi['ln_NRR']=wdi['NY.GDP.TOTL.RT.ZS'].apply(np.log)
#Exports as a percentage of GDP
wdi['Exports_TR'] = wdi['NE.EXP.GNFS.ZS']
#Price of Oil
wdi['POil'] = wdi['EP.PMP.SGAS.CD']
wdi['POil_chg']=wdi['POil'].pct_change()

wdi
C:\Users\skand\anaconda3\envs\EconGrowthUG-Builds-Windows-pip\lib\site-packages\pandas_datareader\wb.py:592: UserWarning:

Non-standard ISO country codes: JG, XK

Out[389]:
country year NY.GDP.MKTP.KD.ZG NY.GDP.PCAP.KD.ZG NY.GDP.PETR.RT.ZS NE.EXP.GNFS.ZS NY.GDP.TOTL.RT.ZS NY.GDP.PCAP.PP.KD EP.PMP.SGAS.CD gdp_pc ... GDP_grow ln_GDP_grow GDPPC_grow OR ln_OR NRR ln_NRR Exports_TR POil POil_chg
0 Aruba 2020 -22.318948 -22.650725 NaN 56.545088 NaN 29563.756955 NaN 29563.756955 ... -22.318948 NaN -22.650725 NaN NaN NaN NaN 56.545088 NaN NaN
1 Aruba 2019 -2.085600 -2.512957 NaN 74.582278 NaN 38221.117314 NaN 38221.117314 ... -2.085600 NaN -2.512957 NaN NaN NaN NaN 74.582278 NaN NaN
2 Aruba 2018 1.267218 0.803198 0.0 73.796232 0.001875 39206.356147 NaN 39206.356147 ... 1.267218 0.236824 0.803198 0.0 -inf 0.001875 -6.279193 73.796232 NaN NaN
3 Aruba 2017 5.482371 4.985800 0.0 72.556459 0.002827 38893.960556 NaN 38893.960556 ... 5.482371 1.701538 4.985800 0.0 -inf 0.002827 -5.868554 72.556459 NaN NaN
4 Aruba 2016 2.116716 1.604501 0.0 71.821756 0.003344 37046.877414 NaN 37046.877414 ... 2.116716 0.749866 1.604501 0.0 -inf 0.003344 -5.700610 71.821756 NaN NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
13232 Zimbabwe 1964 -1.106172 -4.403385 NaN NaN NaN NaN NaN NaN ... -1.106172 NaN -4.403385 NaN NaN NaN NaN NaN NaN 0.0
13233 Zimbabwe 1963 6.244345 2.697117 NaN NaN NaN NaN NaN NaN ... 6.244345 1.831676 2.697117 NaN NaN NaN NaN NaN NaN 0.0
13234 Zimbabwe 1962 1.434471 -1.934893 NaN NaN NaN NaN NaN NaN ... 1.434471 0.360796 -1.934893 NaN NaN NaN NaN NaN NaN 0.0
13235 Zimbabwe 1961 6.316157 2.821534 NaN NaN NaN NaN NaN NaN ... 6.316157 1.843111 2.821534 NaN NaN NaN NaN NaN NaN 0.0
13236 Zimbabwe 1960 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.0

13237 rows × 21 columns

In [390]:
wdi = wbcountries.merge(wdi, left_on='name', right_on='country')
wdi
Out[390]:
iso3c iso2c name region adminregion incomeLevel lendingType capitalCity longitude latitude ... GDP_grow ln_GDP_grow GDPPC_grow OR ln_OR NRR ln_NRR Exports_TR POil POil_chg
0 ABW AW Aruba Latin America & Caribbean High Income Not classified Oranjestad -70.0167 12.5167 ... -22.318948 NaN -22.650725 NaN NaN NaN NaN 56.545088 NaN NaN
1 ABW AW Aruba Latin America & Caribbean High Income Not classified Oranjestad -70.0167 12.5167 ... -2.085600 NaN -2.512957 NaN NaN NaN NaN 74.582278 NaN NaN
2 ABW AW Aruba Latin America & Caribbean High Income Not classified Oranjestad -70.0167 12.5167 ... 1.267218 0.236824 0.803198 0.0 -inf 0.001875 -6.279193 73.796232 NaN NaN
3 ABW AW Aruba Latin America & Caribbean High Income Not classified Oranjestad -70.0167 12.5167 ... 5.482371 1.701538 4.985800 0.0 -inf 0.002827 -5.868554 72.556459 NaN NaN
4 ABW AW Aruba Latin America & Caribbean High Income Not classified Oranjestad -70.0167 12.5167 ... 2.116716 0.749866 1.604501 0.0 -inf 0.003344 -5.700610 71.821756 NaN NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
13232 ZWE ZW Zimbabwe Sub-Saharan Africa Sub-Saharan Africa (excluding high income) Lower Middle Income Blend Harare 31.0672 -17.8312 ... -1.106172 NaN -4.403385 NaN NaN NaN NaN NaN NaN 0.0
13233 ZWE ZW Zimbabwe Sub-Saharan Africa Sub-Saharan Africa (excluding high income) Lower Middle Income Blend Harare 31.0672 -17.8312 ... 6.244345 1.831676 2.697117 NaN NaN NaN NaN NaN NaN 0.0
13234 ZWE ZW Zimbabwe Sub-Saharan Africa Sub-Saharan Africa (excluding high income) Lower Middle Income Blend Harare 31.0672 -17.8312 ... 1.434471 0.360796 -1.934893 NaN NaN NaN NaN NaN NaN 0.0
13235 ZWE ZW Zimbabwe Sub-Saharan Africa Sub-Saharan Africa (excluding high income) Lower Middle Income Blend Harare 31.0672 -17.8312 ... 6.316157 1.843111 2.821534 NaN NaN NaN NaN NaN NaN 0.0
13236 ZWE ZW Zimbabwe Sub-Saharan Africa Sub-Saharan Africa (excluding high income) Lower Middle Income Blend Harare 31.0672 -17.8312 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.0

13237 rows × 31 columns

In [391]:
# merging data to create one complete data set
compdat = cpd.merge(wdi, how="inner", on=["iso3c"])
compdat = compdat.drop(['iso2c', 'adminregion', 'NY.GDP.MKTP.KD.ZG',
                        'NY.GDP.PCAP.KD.ZG', 'NY.GDP.PETR.RT.ZS', 'NE.EXP.GNFS.ZS', 'NY.GDP.TOTL.RT.ZS', 
                        'latitude', 'longitude', 'name', 'capitalCity', 'lendingType', 'country', 
                        'NY.GDP.PCAP.PP.KD', 'EP.PMP.SGAS.CD'], axis=1)
In [392]:
compdat.loc[compdat.year==2015].count()
Out[392]:
Country Name      52
iso3c             52
Exports           52
NR_TE             52
Dependence_Deg    52
region            52
incomeLevel       52
year              52
gdp_pc            49
ln_gdppc          49
GDP_grow          51
ln_GDP_grow       40
GDPPC_grow        51
OR                51
ln_OR             51
NRR               51
ln_NRR            51
Exports_TR        45
POil               0
POil_chg          52
dtype: int64
In [393]:
compdat.dtypes
Out[393]:
Country Name       object
iso3c              object
Exports            object
NR_TE               int64
Dependence_Deg     object
region             object
incomeLevel        object
year                int32
gdp_pc            float64
ln_gdppc          float64
GDP_grow          float64
ln_GDP_grow       float64
GDPPC_grow        float64
OR                float64
ln_OR             float64
NRR               float64
ln_NRR            float64
Exports_TR        float64
POil              float64
POil_chg          float64
dtype: object
In [394]:
compdat
Out[394]:
Country Name iso3c Exports NR_TE Dependence_Deg region incomeLevel year gdp_pc ln_gdppc GDP_grow ln_GDP_grow GDPPC_grow OR ln_OR NRR ln_NRR Exports_TR POil POil_chg
0 Congo, Dem. Rep COD Minerals & Oil 94 Dependent Sub-Saharan Africa Low Income 2020 1082.445242 6.986978 1.735423 0.551251 -1.412051 0.500318 -0.692512 14.884275 2.700305 28.604587 NaN 0.000000
1 Congo, Dem. Rep COD Minerals & Oil 94 Dependent Sub-Saharan Africa Low Income 2019 1097.948840 7.001199 4.384529 1.478082 1.110160 0.749021 -0.288988 13.773919 2.622777 25.756239 NaN 0.000000
2 Congo, Dem. Rep COD Minerals & Oil 94 Dependent Sub-Saharan Africa Low Income 2018 1085.893688 6.990159 5.821121 1.761493 2.461093 0.928356 -0.074340 17.930273 2.886491 33.807350 NaN 0.000000
3 Congo, Dem. Rep COD Minerals & Oil 94 Dependent Sub-Saharan Africa Low Income 2017 1059.810762 6.965846 3.726948 1.315590 0.401474 0.577089 -0.549759 24.682857 3.206109 30.690155 NaN 0.000000
4 Congo, Dem. Rep COD Minerals & Oil 94 Dependent Sub-Saharan Africa Low Income 2016 1055.572915 6.961839 2.399399 0.875218 -0.907724 0.321911 -1.133480 20.587359 3.024677 32.787860 1.49 1.191176
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
3167 Norway NOR Oil 62 High Europe & Central Asia High Income 1964 NaN NaN 5.009651 1.611366 4.219394 NaN NaN NaN NaN NaN NaN 0.000000
3168 Norway NOR Oil 62 High Europe & Central Asia High Income 1963 NaN NaN 3.785043 1.331057 3.003259 NaN NaN NaN NaN NaN NaN 0.000000
3169 Norway NOR Oil 62 High Europe & Central Asia High Income 1962 NaN NaN 2.813945 1.034587 1.991246 NaN NaN NaN NaN NaN NaN 0.000000
3170 Norway NOR Oil 62 High Europe & Central Asia High Income 1961 NaN NaN 6.273336 1.836308 5.432493 NaN NaN NaN NaN NaN NaN 0.000000
3171 Norway NOR Oil 62 High Europe & Central Asia High Income 1960 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.000000

3172 rows × 20 columns

In [395]:
#Oil Specific Data - focuses on countries with oil rents greater than 5%
oildat = cpd.merge(wdi, how="inner", on=["iso3c"])
oildat = oildat.drop(['iso2c', 'adminregion', 'NY.GDP.MKTP.KD.ZG',
                        'NY.GDP.PCAP.KD.ZG', 'NY.GDP.PETR.RT.ZS', 'NE.EXP.GNFS.ZS', 'NY.GDP.TOTL.RT.ZS', 
                        'latitude', 'longitude', 'name', 'capitalCity', 'lendingType', 'country', 
                        'NY.GDP.PCAP.PP.KD', 'EP.PMP.SGAS.CD'], axis=1)
oildat = oildat[oildat.OR > 1]
oildat
Out[395]:
Country Name iso3c Exports NR_TE Dependence_Deg region incomeLevel year gdp_pc ln_gdppc GDP_grow ln_GDP_grow GDPPC_grow OR ln_OR NRR ln_NRR Exports_TR POil POil_chg
6 Congo, Dem. Rep COD Minerals & Oil 94 Dependent Sub-Saharan Africa Low Income 2014 1029.790813 6.937111 9.470288 2.248159 5.895884 1.116515 0.110212 24.616335 3.203410 36.832189 1.68 0.127517
7 Congo, Dem. Rep COD Minerals & Oil 94 Dependent Sub-Saharan Africa Low Income 2013 972.455934 6.879825 8.481957 2.137941 4.927570 1.468049 0.383934 25.478817 3.237847 36.445861 NaN 0.000000
8 Congo, Dem. Rep COD Minerals & Oil 94 Dependent Sub-Saharan Africa Low Income 2012 926.787816 6.831725 7.086899 1.958248 3.571784 1.806321 0.591292 26.853521 3.290397 30.803009 1.48 -0.119048
9 Congo, Dem. Rep COD Minerals & Oil 94 Dependent Sub-Saharan Africa Low Income 2011 894.826545 6.796630 6.874671 1.927844 3.366413 2.126667 0.754556 28.572952 3.352461 39.515617 NaN 0.000000
10 Congo, Dem. Rep COD Minerals & Oil 94 Dependent Sub-Saharan Africa Low Income 2010 865.684040 6.763520 7.107977 1.961218 3.598839 1.788415 0.581330 25.946539 3.256038 41.111154 1.28 -0.135135
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
3152 Norway NOR Oil 62 High Europe & Central Asia High Income 1979 NaN NaN 4.372460 1.475326 4.017608 3.859987 1.350664 5.366026 1.680088 39.253048 NaN 0.000000
3153 Norway NOR Oil 62 High Europe & Central Asia High Income 1978 NaN NaN 3.869406 1.353101 3.473601 1.634957 0.491616 2.363321 0.860068 35.982910 NaN 0.000000
3154 Norway NOR Oil 62 High Europe & Central Asia High Income 1977 NaN NaN 4.160747 1.425695 3.721429 1.449441 0.371178 1.777636 0.575284 34.285507 NaN 0.000000
3155 Norway NOR Oil 62 High Europe & Central Asia High Income 1976 NaN NaN 5.825393 1.762227 5.330220 1.517877 0.417313 1.942708 0.664083 35.970508 NaN 0.000000
3156 Norway NOR Oil 62 High Europe & Central Asia High Income 1975 NaN NaN 4.952148 1.599821 4.374524 1.005782 0.005765 1.422679 0.352541 36.102043 NaN 0.000000

1500 rows × 20 columns

Data Analysis:Regressions and Correlations Between Variables¶

Note: Some of the data is questionable. For example, the GDP growth of Guyana is averaged at 40% and Brunei has a GDPPC higher than both Norway and the United States. When necessary, this data is emphasized as outliers. Otherwise, the data is assumed to be reliable.

Also, each dynamic chart has a png copy beneath it for ease of reading when using the html file.

Exports and GDP growth: Illustrating the resource curse for both GDP and GDPPC growth
In [396]:
dffig = compdat.loc[compdat.year==year]\
            .dropna(subset=['NR_TE', 'GDP_grow', 'gdp_pc'])\
            .sort_values(by='region').reset_index()
mod = smf.ols(formula='NR_TE ~ GDP_grow', data=dffig, missing='drop').fit()
mod.summary2()
Out[396]:
Model: OLS Adj. R-squared: -0.016
Dependent Variable: NR_TE AIC: 462.2619
Date: 2022-11-26 16:17 BIC: 466.0043
No. Observations: 48 Log-Likelihood: -229.13
Df Model: 1 F-statistic: 0.2680
Df Residuals: 46 Prob (F-statistic): 0.607
R-squared: 0.006 Scale: 855.60
Coef. Std.Err. t P>|t| [0.025 0.975]
Intercept 65.2929 4.4252 14.7548 0.0000 56.3855 74.2004
GDP_grow -0.2549 0.4925 -0.5176 0.6072 -1.2462 0.7364
Omnibus: 5.823 Durbin-Watson: 1.870
Prob(Omnibus): 0.054 Jarque-Bera (JB): 4.588
Skew: -0.640 Prob(JB): 0.101
Kurtosis: 2.190 Condition No.: 9
In [397]:
dffig2 = oildat.loc[oildat.year==year]\
            .dropna(subset=['NR_TE', 'GDP_grow', 'gdp_pc', 'OR'])\
            .sort_values(by='region').reset_index()
mod = smf.ols(formula='NR_TE ~ GDP_grow', data=dffig2, missing='drop').fit()
mod.summary2()
Out[397]:
Model: OLS Adj. R-squared: -0.027
Dependent Variable: NR_TE AIC: 298.7369
Date: 2022-11-26 16:17 BIC: 301.6049
No. Observations: 31 Log-Likelihood: -147.37
Df Model: 1 F-statistic: 0.2151
Df Residuals: 29 Prob (F-statistic): 0.646
R-squared: 0.007 Scale: 842.57
Coef. Std.Err. t P>|t| [0.025 0.975]
Intercept 71.7513 5.4475 13.1715 0.0000 60.6099 82.8926
GDP_grow -0.2396 0.5166 -0.4638 0.6463 -1.2962 0.8170
Omnibus: 6.282 Durbin-Watson: 1.079
Prob(Omnibus): 0.043 Jarque-Bera (JB): 5.714
Skew: -1.050 Prob(JB): 0.057
Kurtosis: 2.895 Condition No.: 11

Between these two data analysis, we can see that natural resources as a percent of total exports has a nul negative effect on resource rich countries in general (the slope is negative but p>.6). However, for oil rich countries, there is a negative correlation of natural resources on GDP growth. The slope is -.8 and the p value is <.005. This means there is a significant negative effect of oil exports on GDP growth. However, the data only explains about 40% of the data (R^2=.387). We will look further into the data to find other sources for a negative correlation.

In [398]:
symbols = ['circle', 'x', 'square', 'cross', 'diamond', 'star-diamond', 'triangle-up']
fig1 = px.scatter(dffig,
                 x="Exports_TR", 
                 y="GDP_grow", 
                 color='region',
                 symbol='region',
                 symbol_sequence=symbols,
                 hover_name='Country Name',
                 hover_data=['iso3c', 'Exports_TR', 'GDP_grow'],
                 size='gdp_pc',
                 size_max=20,
                 trendline="ols",
                 trendline_scope="overall",
                 trendline_color_override="black",
                 labels={
                     "Exports_TR": "Total Exports as a Percentage of GDP",
                     "GDP_grow": "GDP Growth",
                     "region": "WB Region",
                     "gdp_pc": "GDP Per Capita"
                 },
                 opacity=0.75,
                 height=800,
                )
In [399]:
fig1.show()

TotalExportsVSgdpgrowth.png

In [400]:
symbols = ['circle', 'x', 'square', 'cross', 'diamond', 'star-diamond', 'triangle-up']
fig2 = px.scatter(dffig,
                 x="NR_TE", 
                 y="GDP_grow", 
                 color='region',
                 symbol='region',
                 symbol_sequence=symbols,
                 hover_name='Country Name',
                 hover_data=['iso3c', 'NR_TE', 'GDP_grow'],
                 size='gdp_pc',
                 size_max=20,
                 trendline="ols",
                 trendline_scope="overall",
                 trendline_color_override="black",
                 labels={
                     "NR_TE": "Natural Resources as a Percentage of Total Exports",
                     "GDP_grow": "GDP Growth",
                     "region": "WB Region",
                     "gdp_pc": "GDP Per Capita"
                 },
                 opacity=0.75,
                 height=600,
                )
In [401]:
fig2.show()

NR_TEvsGDP_grow.png

In [402]:
symbols = ['circle', 'x', 'square', 'cross', 'diamond', 'star-diamond', 'triangle-up']
fig3 = px.scatter(dffig,
                 x="Exports_TR", 
                 y="GDPPC_grow", 
                 color='region',
                 symbol='region',
                 symbol_sequence=symbols,
                 hover_name='Country Name',
                 hover_data=['iso3c', 'Exports_TR', 'gdp_pc', 'GDPPC_grow'],
                 size='gdp_pc',
                 size_max=20,
                 trendline="ols",
                 trendline_scope="overall",
                 trendline_color_override="black",
                 labels={
                     "Exports_TR": "Total Exports as a Percentage of GDP",
                     "GDPPC_grow": "GDP Per Capita Growth",
                     "region": "WB Region",
                     "gdp_pc": "GDP Per Capita"
                 },
                 opacity=0.75,
                 height=600,
                )
In [403]:
fig3.show()

ExportsVSGDPPC_grow.png

In [404]:
symbols = ['circle', 'x', 'square', 'cross', 'diamond', 'star-diamond', 'triangle-up']
fig4 = px.scatter(dffig,
                 x="NR_TE", 
                 y="GDPPC_grow", 
                 color='region',
                 symbol='region',
                 symbol_sequence=symbols,
                 hover_name='Country Name',
                 hover_data=['iso3c', 'NR_TE', 'GDPPC_grow', 'gdp_pc'],
                 size='gdp_pc',
                 size_max=20,
                 trendline="ols",
                 trendline_scope="overall",
                 trendline_color_override="black",
                 labels={
                     "GDPPC_grow" : 'GDP Per Capita Growth',
                     "NR_TE": "Natural Resources as a Percentage of Total Exports",
                     "GDP_grow": "GDP Growth",
                     "region": "WB Region",
                     "gdp_pc": "GDP Per Capita"
                 },
                 opacity=0.75,
                 height=800,
                )
In [405]:
fig4.show()

NR_TEvsGDP_grow.png

Analysis:¶

These two graphs are crucial to demonstrate how natural resources have a negative effect on GDP growth. Fig1 shows how exports are positively correlated with GDP; countries with higher export levels also have higher GDP growth. Fig2 demonstrates a unique caveat: natural resources are NOT positively correlated with GDP growth. Fig2 even suggests the opposite, as natural resource exports increase, GDP growth decreases. Even excluding some extreme outliers (like Guyana with GDP growth +43% avg and Libya with GDP growth -23% avg), there is a slight negative correlation between natural resource exports and GDP growth.

GDP per capita shows similar trends. As total exports increase, GDP per capita saw a slight increase. However, as natural resources exports increase, GDP per capita growth turns to a slight decrease. The visible differences between fig3 and fig 4 show that nautral resources have a negative effect on GDP growth.

It is also important to note that region plays a role in these effects. African and Middle Eastern countries are more negatively affected by resources, as they can be scattered around the OLS line for total exports, but as natural resource export increase, these two regions rank below the OLS. European countries are the least affected, as they consistently perform better than their regional counterparts for both GDP and GDPPC growth regardless of export specification.

Despite the correlation being weak, the change from a distinct positive correlation between all exports and GDP growth and the negative or neutral correlation between natural resource exports and GDP growth indicates natural resources have a negative pressure on GDP growth. This section demonstrates that natural resources have a clear negative effect on growth. The next sections will attempt to explain which factors are the most influential at preventing growth.

Prices and GDP Growth: In this section, we will be focusing on Oil prices and exports. We chose to focus on oil due to more reliable information being available and a consistent international price is available unlike other nautral resources. In addition, the majority of our resource-rich countries export oil.
In [406]:
# Price of Oil from 1998 to 2016
url = 'https://data.worldbank.org/share/widget?indicators=EP.PMP.SGAS.CD'
IFrame(url, width=500, height=300)
Out[406]:

oil%20and%20history-2.jpg

In [407]:
def my_xy_line_plot(dfin, 
                    x='year', 
                    y='GDP_grow', 
                    labelvar='iso3c', 
                    dx=0.006125, 
                    dy=0.006125, 
                    xlogscale=False, 
                    ylogscale=False,
                    xlabel='Time', 
                    ylabel='GDP Growth',
                    labels=False,
                    xpct = False,
                    ypct = False,
                    OLS=False,
                    OLSlinelabel='OLS',
                    ssline=False,
                    sslinelabel='45 Degree Line',
                    filename='time-oil-gdp-growth.pdf',
                    hue='region',
                    hue_order=['East Asia & Pacific', 'Europe & Central Asia',
                               'Latin America & Caribbean ', 'Middle East & North Africa',
                               'North America', 'South Asia', 'Sub-Saharan Africa '],
                    style='Dependence_Deg', 
                    style_order=['Dependent', 'High', 'Medium', 'Low'],
                    palette=True,
                    legend_fontsize=10,
                    label_fontsize=12,
                    loc=None,
                    save=True):
    '''
    Plot the association between x and var in dataframe using labelvar for labels. 
    '''
    sns.set(rc={'figure.figsize':(11.7,8.27)})
    sns.set_context("talk")
    df = dfin.copy()
    df = df.dropna(subset=[x, y]).reset_index(drop=True)
    # Plot
    k = 0
    fig, ax = plt.subplots()
    sns.lineplot(x=x, y=y, data=df, ax=ax, 
                    hue=hue,
                    hue_order=hue_order,
                    alpha=1, 
                    style=style, 
                    style_order=style_order,
                    palette=palette,
                )
    if OLS:
        sns.regplot(x=x, y=y, data=df, ax=ax, label=OLSlinelabel, scatter=False)
    if ssline:
        ax.plot([df[x].min()*.99, df[x].max()*1.01], [df[x].min()*.99, df[x].max()*1.01], c='r', label=sslinelabel)
    if labels:
        movex = df[x].mean() * dx
        movey = df[y].mean() * dy
        for line in range(0,df.shape[0]):
            ax.text(df[x][line]+movex, df[y][line]+movey, df[labelvar][line], horizontalalignment='left', fontsize=label_fontsize, color='black')
    ax.set_xlabel(xlabel)
    ax.set_ylabel(ylabel)
    if xpct:
        fmt = '%.0f%%' # Format you want the ticks, e.g. '40%'
        xticks = mtick.FormatStrFormatter(fmt)
        ax.xaxis.set_major_formatter(xticks)
    if ypct:
        fmt = '%.0f%%' # Format you want the ticks, e.g. '40%'
        yticks = mtick.FormatStrFormatter(fmt)
        ax.yaxis.set_major_formatter(yticks)
    if ylogscale:
        ax.set(yscale="log")
    if xlogscale:
        ax.set(xscale="log")
    handles, labels = ax.get_legend_handles_labels()
    handles = np.array(handles)
    labels = np.array(labels)
    handles = list(handles[(labels!='region') & (labels!='incomeLevel')])
    labels = list(labels[(labels!='region') & (labels!='incomeLevel')])
    ax.legend(handles=handles, labels=labels, fontsize=legend_fontsize, loc=loc)
    if save:
        plt.savefig(pathgraphs + filename, dpi=300, bbox_inches='tight')
    return fig
In [408]:
palette=sns.color_palette("Blues_r", oildat['Dependence_Deg'].unique().shape[0]+4)[:oildat['Dependence_Deg'].unique().shape[0]*2:2]
figtime = my_xy_line_plot(oildat, 
                x='year', 
                y='GDP_grow', 
                xlabel='Year',
                ylabel='GDP Growth',
                filename='time-gdp-grow.pdf',
                hue='Dependence_Deg',
                hue_order=['Dependent', 'High', 'Medium', 'Low'],
                palette=palette,
                OLS=False, 
                labels=False,
                legend_fontsize=16,
                loc='lower right',
                save=False)

GDPgrowovertime.png

Analysis:¶

This graph demonstrates how different dependencies on oil react to price changes. Two time frames demonstrate these tendendcies best: between 1970 and 1990, and 2000 onward.

In the 1970s, many developing countries began nationlalizing their oil industries, skyrocketing the price of oil. Theoretically, oil dependent countries who now had a massive revenue increase and benefit from rising oil prices should also see a dramatic rise in GDP growth. However, figtime illustrates how GDP growth, particularly in the most dependendent countries with 75%+ of their GDP in oil revenues have dramatic rising and dips in the 1970s. We do see a rough maximum of growth in 1976 when oil prices were at their highest. However, the most dependent countries were the most erratic, bouncing between 10-20% growth and 0% growth. There is also a steady decline in GDP growth, finally resting around 0-5% for the entirety of the 1980s. This coincides with a the decline of oil prices, which reached a bottom in 1986. While we can assume that resource dependent countries roughly follow the trends of resource prices, higher levels of dependence directly correlate with GDP growth erraticism and unreliability. Countries with low dependence follow price trends well but with more steady growth and less extremes.

These hypotheses are further corroborated by the 2000s onward. As seen on the World Bank and FRED graph, the price of oil has been extremely erratic, on a steady rise until 2014, then rising again from 2016-2020.The final drop around 2020 should be attributed to the Coronavirus and the sudden drop in oil stocks. However, average growth for oil countries was hovering around 0% since around 2012. This is contradictory to what should be assumed about resource dependent countries. Rather than growing more rapidly with a rising price of oil, there is a peak in prices around 2003-2004 and a slight decline since. Most countries that export oil have not exceed 10% increases since 2005~ but oil price peaked in 2009 and 2015 again. While stable economic growth could be seen as a benefit, it seems dependent countries only react to oil prices when they decline rapidly and not when they steadily increase. Therefore, some mechanic is preventing GDP growth inspite of rising prices.

Exports and Government Rents: Here, we will be establishing a correlation between dependence on nautral resources and government rents. Ultimately, this correlation demonstrates how governments employ resource revenues
In [ ]:
x = compdat[['NR_TE','NRR','Exports_TR']]
y = compdat['GDP_grow']

x = sm.add_constant(x)
lrm1 = smf.ols(formula='GDP_grow ~ NR_TE + NRR + Exports_TR',data=compdat).fit()
In [410]:
print(lrm1.summary())
                            OLS Regression Results                            
==============================================================================
Dep. Variable:               GDP_grow   R-squared:                       0.014
Model:                            OLS   Adj. R-squared:                  0.012
Method:                 Least Squares   F-statistic:                     9.075
Date:                Sat, 26 Nov 2022   Prob (F-statistic):           5.77e-06
Time:                        16:17:24   Log-Likelihood:                -6518.4
No. Observations:                1925   AIC:                         1.304e+04
Df Residuals:                    1921   BIC:                         1.307e+04
Df Model:                           3                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
Intercept      2.9199      0.490      5.964      0.000       1.960       3.880
NR_TE         -0.0070      0.007     -1.037      0.300      -0.020       0.006
NRR            0.0459      0.015      2.991      0.003       0.016       0.076
Exports_TR     0.0174      0.010      1.712      0.087      -0.003       0.037
==============================================================================
Omnibus:                      646.358   Durbin-Watson:                   1.524
Prob(Omnibus):                  0.000   Jarque-Bera (JB):            24389.035
Skew:                           0.882   Prob(JB):                         0.00
Kurtosis:                      20.348   Cond. No.                         248.
==============================================================================

Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.

Data_GDP_diff.png

In [ ]:
x = oildat[['NR_TE','Exports_TR', 'NRR','OR']]
y = oildat['GDP_grow']

x = sm.add_constant(x)
lrm2 = smf.ols(formula='GDP_grow ~ NR_TE + Exports_TR + NRR + OR',data=oildat).fit()
In [411]:
print(lrm2.summary())
                            OLS Regression Results                            
==============================================================================
Dep. Variable:               GDP_grow   R-squared:                       0.034
Model:                            OLS   Adj. R-squared:                  0.031
Method:                 Least Squares   F-statistic:                     11.03
Date:                Sat, 26 Nov 2022   Prob (F-statistic):           8.63e-09
Time:                        16:17:24   Log-Likelihood:                -4342.3
No. Observations:                1246   AIC:                             8695.
Df Residuals:                    1241   BIC:                             8720.
Df Model:                           4                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
Intercept      2.7847      0.668      4.166      0.000       1.473       4.096
NR_TE         -0.0225      0.009     -2.365      0.018      -0.041      -0.004
Exports_TR     0.0157      0.014      1.125      0.261      -0.012       0.043
NRR            0.0479      0.035      1.364      0.173      -0.021       0.117
OR             0.0534      0.035      1.512      0.131      -0.016       0.123
==============================================================================
Omnibus:                      426.683   Durbin-Watson:                   1.613
Prob(Omnibus):                  0.000   Jarque-Bera (JB):            14997.207
Skew:                           0.905   Prob(JB):                         0.00
Kurtosis:                      19.900   Cond. No.                         271.
==============================================================================

Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.

image.png

These two data analysis show surprising results. LRM1 runs a regression that demonstrates that as natural resource rents increase, GDP growth also increase (.05 slope with a p<.01). For oil rich countries, as oil rents increase, GDP growth also increases ( .1 slope with a p<.05). This correlation is indicative that as GDP grows, governments seek to gain more rents from natural resources. This data is better represented in oil countries (R^2 = .03>.014). However, this data could be spread out due to differences in government types. Countries with higher economic growth (like Norway or the Saudi Arabia) are split between different types of government, such as democracies and autocracies. However, despite the variance, there is a positive correlation between government rents and GDP growth.

In [421]:
symbols = ['circle', 'x', 'square', 'cross', 'diamond', 'star-diamond', 'triangle-up']
fig5 = px.scatter(dffig,
                 x="NR_TE", 
                 y="ln_NRR", 
                 color='region',
                 symbol='region',
                 symbol_sequence=symbols,
                 hover_name='Country Name',
                 hover_data=['iso3c', 'NR_TE', 'NRR', 'gdp_pc'],
                 size='gdp_pc',
                 size_max=20,
                 trendline="ols",
                 trendline_scope="overall",
                 trendline_color_override="black",
                 labels={
                     "NR_TE": "Natural Resources as a Percentage of Total Exports",
                     "ln_NRR": 'Log of Natural Resource Rents',
                     "region": "WB Region",
                     "gdp_pc": "GDP Per Capita"
                 },
                 opacity=0.75,
                 height=700,
                )
In [413]:
fig5.show()

NR_TEvsNR_TE.png

In [414]:
symbols = ['circle', 'x', 'square', 'cross', 'diamond', 'star-diamond', 'triangle-up']
fig6 = px.scatter(dffig2,
                 x="NR_TE", 
                 y="ln_OR", 
                 color='region',
                 symbol='region',
                 symbol_sequence=symbols,
                 hover_name='Country Name',
                 hover_data=['iso3c', 'NR_TE', 'NRR', 'gdp_pc'],
                 size='gdp_pc',
                 size_max=20,
                 trendline="ols",
                 trendline_scope="overall",
                 trendline_color_override="black",
                 labels={
                     "NR_TE": "Natural Resources (Oil) as a Percentage of Total Exports",
                     "ln_OR": 'Log Oil Rents as a Percentage of GDP',
                     "region": "WB Region",
                     "gdp_pc": "GDP Per Capita"
                 },
                 opacity=0.75,
                 height=700,
                )
In [415]:
fig6.show()

newplot%20%281%29.png

Analysis:¶

These analsyes demonstrate that as dependence increases, natural resource rents also increase. For both natural resources in general and oil, there is a clear positive correlation between a rise in resources as a percent of exports and government rents. Fig5 demonstrates that as natural resources increase by 1%, natural resouce rents increase by .020% (slope=.02). The only exception to this rule was Botswana, which saw a decrease in rents. Regardless of government type, all countries increased government rents as dependence on resources increased.

Oil countries showed similar data. These countries were filtered to exclude any low-level oil exporters, where oil rents are greater than 5% of total GDP. Although the R^2 is only .38, there is a clear cluster of countries with 90%+ oil exports and oil rents increasing exponentially. Oil showed a slightly more elastic correlation, as rents increase by .022% as oil exports increased by 1%. Excluding the outliers of Papua New Guinea and Mongolia would likely show a steeper slope as well, skewed towards the cluster in the top right quandrant.

It is extrememly important to note the regional differences for both natural resources and oil. The Middle East consistently ranks highest for oil exports and high resource rents. The countries with highest rents also tend to be authoritarian, such as Iraq, Saudi Arabia, and the Democratic Republic of Congo. These nations also have some of the most human rights violations and political instability. The countries with the highest rents also have medium-low GDP per capita, like Iraq and Angola. Clearly, there is a diversion of revenue from the people of the country to the government.

Over Time: How GDP growth and resource rents influence economic growth over time
In [416]:
def my_xy_line_plot(dfin, 
                    x='year', 
                    y='GDP_grow', 
                    labelvar='iso3c', 
                    dx=0.006125, 
                    dy=0.006125, 
                    xlogscale=False, 
                    ylogscale=False,
                    xlabel='Time', 
                    ylabel='GDP Growth',
                    labels=False,
                    xpct = False,
                    ypct = False,
                    OLS=False,
                    OLSlinelabel='OLS',
                    ssline=False,
                    sslinelabel='45 Degree Line',
                    filename='time-gdp-growth.pdf',
                    hue='region',
                    hue_order=['East Asia & Pacific', 'Europe & Central Asia',
                               'Latin America & Caribbean ', 'Middle East & North Africa',
                               'North America', 'South Asia', 'Sub-Saharan Africa '],
                    style='Dependence_Deg', 
                    style_order=['Dependent', 'High', 'Medium', 'Low'],
                    palette=True,
                    legend_fontsize=10,
                    label_fontsize=12,
                    loc=None,
                    save=True):
    '''
    Plot the association between x and var in dataframe using labelvar for labels. 
    '''
    sns.set(rc={'figure.figsize':(11.7,8.27)})
    sns.set_context("talk")
    df = dfin.copy()
    df = df.dropna(subset=[x, y]).reset_index(drop=True)
    # Plot
    k = 0
    fig, ax = plt.subplots()
    sns.lineplot(x=x, y=y, data=df, ax=ax, 
                    hue=hue,
                    hue_order=hue_order,
                    alpha=1, 
                    style=style, 
                    style_order=style_order,
                    palette=palette,
                )
    if OLS:
        sns.regplot(x=x, y=y, data=df, ax=ax, label=OLSlinelabel, scatter=False)
    if ssline:
        ax.plot([df[x].min()*.99, df[x].max()*1.01], [df[x].min()*.99, df[x].max()*1.01], c='r', label=sslinelabel)
    if labels:
        movex = df[x].mean() * dx
        movey = df[y].mean() * dy
        for line in range(0,df.shape[0]):
            ax.text(df[x][line]+movex, df[y][line]+movey, df[labelvar][line], horizontalalignment='left', fontsize=label_fontsize, color='black')
    ax.set_xlabel(xlabel)
    ax.set_ylabel(ylabel)
    if xpct:
        fmt = '%.0f%%' # Format you want the ticks, e.g. '40%'
        xticks = mtick.FormatStrFormatter(fmt)
        ax.xaxis.set_major_formatter(xticks)
    if ypct:
        fmt = '%.0f%%' # Format you want the ticks, e.g. '40%'
        yticks = mtick.FormatStrFormatter(fmt)
        ax.yaxis.set_major_formatter(yticks)
    if ylogscale:
        ax.set(yscale="log")
    if xlogscale:
        ax.set(xscale="log")
    handles, labels = ax.get_legend_handles_labels()
    handles = np.array(handles)
    labels = np.array(labels)
    handles = list(handles[(labels!='region') & (labels!='incomeLevel')])
    labels = list(labels[(labels!='region') & (labels!='incomeLevel')])
    ax.legend(handles=handles, labels=labels, fontsize=legend_fontsize, loc=loc)
    if save:
        plt.savefig(pathgraphs + filename, dpi=300, bbox_inches='tight')
    return fig
In [417]:
palette=sns.color_palette("Reds_r", compdat['Dependence_Deg'].unique().shape[0]+4)[:compdat['Dependence_Deg'].unique().shape[0]*2:2]
fig8 = my_xy_line_plot(compdat, 
                x='year', 
                y='GDP_grow', 
                xlabel='Year',
                ylabel='GDP Growth',
                filename='time-gdp-grow.pdf',
                hue='Dependence_Deg',
                hue_order=['Dependent', 'High', 'Medium', 'Low'],
                palette=palette,
                OLS=False, 
                labels=False,
                legend_fontsize=16,
                loc='lower right',
                save=False)

Year%20vs%20GDP%20growth.png

In [418]:
palette=sns.color_palette("Purples_r", compdat['Dependence_Deg'].unique().shape[0]+4)[:compdat['Dependence_Deg'].unique().shape[0]*2:2]
fig9 = my_xy_line_plot(compdat, 
                x='year', 
                y='NRR', 
                xlabel='Year',
                ylabel='Natural Resource Rents as a Percentage of GDP',
                filename='time-NRR-grow.pdf',
                hue='Dependence_Deg',
                hue_order=['Dependent', 'High', 'Medium', 'Low'],
                palette=palette,
                OLS=False, 
                labels=False,
                legend_fontsize=16,
                loc='upper right',
                save=False)

NRRovertime.png

In [420]:
palette=sns.color_palette("Blues_r", compdat['Dependence_Deg'].unique().shape[0]+4)[:compdat['Dependence_Deg'].unique().shape[0]*2:2]
fig10 = my_xy_line_plot(oildat, 
                x='year', 
                y='OR', 
                xlabel='Year',
                ylabel='Oil Rents as a Percentage of GDP',
                filename='time-NRR-grow.pdf',
                hue='Dependence_Deg',
                hue_order=['Dependent', 'High', 'Medium', 'Low'],
                palette=palette,
                OLS=False, 
                labels=False,
                legend_fontsize=16,
                loc='upper right',
                save=False)

ORovertime.png

Analysis:¶

As discussed in the price section, higher dependence on nautral resources creates sporatic growth and inconsistent trend lines. This is shown most clearly whe comparing dependence levels over time. Though averages are consistently positive (excluding dips in the 1980s and 2009), the highly dependent countries have much more randomized and erratic growth. An interesting note is that the overall natural resource trends follow the changes in oil prices more than the oil price nations alone. This is likely due to overall market dips when oil prices are low, affecting other natural resource markets.

Even more dramatically, natural resource rents vary over time. The highly dependent countries vary much more extremely in rents than the less dependent countries, from as low as 10% to more than 40% of GDP. Low, Medium, and High dependencies follow roughly the same trends of resource rents and the highest dependency deviates extremely. Throughout time, most of the dramatic changes in rents occur in the "dependent" category, rather than the other three categories.

Changes in rents in the dependent category for both all resources and oil-specific countries most strongly mimic trends in history. The most notable is the 2009 recession, which created a negative trend in GDP growth and rents. Both declined rapidly, but bounced back quickly. However, after 2009, most natural resources increased in price, but GDP growth did not follow this trend. It takes longer for countries to respond to increases in prices than rapid declines. This is likely due to the demand for natural resources being roughly stable except for during recessions. Then, as demand returns to normal slowly, resource rich countries have more long-term effects to their supply markets than the demand markets.

Thus, natural resources tend to have negative effects on grow, as negative shocks will be more long-lasting and dramatic than positive shocks. Over time, depedence on these resources will create asymmetrical and erratic growth, limiting true and stable development for underdeveloped countries.

Conclusion¶

Observing export centralization, price volatility, and resource rents illustrates that resource endowment does correlate heavily with economic stagnaition. Compared to total exports, natural resources have negative effects on GDP growth, GDP per capita growth, and economic diversity. Natural resources also seem to enduce economic instability, as these more resource-dependent countries are less economically stable and have erratic growth.

While there are some unique outliers, most of this data corroborates the hypothesis that resource endowment induces or encourages economic stagnation. Export centralization negatively correlated with GDP and GDP per capita growth. Unlike other exports, resources are less stable and damage the growth of the economy altogether. Similarly, resource prices are highly volatile and there is a clear correlation between dips in resource prices and GDP growth dips. However, price hikes are not correlated with rises in GDP growth. Therefore, as Ross indicated, there are more negative long-term effects of resource markets than positive effects. Finally, there is also a correlation between resource dependence and government rents. There is a clear link between government's channeling revenue and an increased dependence on resources, particularly with oil. The one relatively surprising link was a lack of correlation between authoritarian leaders and government rents. While authoritarians did consentrate about the average, there were a fair number of high-ranking democracies with high levels of resource rents. Similarly, some authoritarian states were below average for rent concentration. Altogther, our data showed a distinct correlation between natural resource dependency and stagnation in economic growth. Though growth may appear to be high at times, the erratic nature and negative long-term effects deter strong, consistent economic performance.

Sources¶

Adams, Dawda, Kweku Adams, Subhan Ullah, and Farid Ullah. “Globalisation, Governance, Accountability and the Natural Resource ‘curse’: Implications for Socio-Economic Growth of Oil-Rich Developing Countries.” Resources Policy 61 (2019): 128–40. https://doi.org/10.1016/j.resourpol.2019.02.009.

Federal Reserve Bank of St. Louis. "Historical WTI spot crude oil prices." Drilling Manual. https://www.drillingmanual.com/crude-oil-price-history-graph-tables-for-last-80-years/.

Ghura, Dhaneshwar and Catherine Pattillo. “Macroeconomic Policy Frameworks for Resource-Rich Developing Countries.” International Monetary Fund (2012): 1-55.

Haseeb, Muhammad, Sebastian Kot, Hafezali Iqbal Hussain, and Fakarudin Kamarudin. “The Natural Resources Curse-Economic Growth Hypotheses: Quantile–on–Quantile Evidence from Top Asian Economies.” Journal of Cleaner Production 279 (2021): 123596–. https://doi.org/10.1016/j.jclepro.2020.123596.

Lederman, Daniel, William F. Maloney. Natural Resources Neither Curse nor Destiny. Palo Alto, CA: Stanford Economics and Finance, an imprint of Stanford University Press, 2007.

Murshed, Syed Mansoob, and Leandro Antonio Serino. “The Pattern of Specialization and Economic Growth: The Resource Curse Hypothesis Revisited.” Structural Change and Economic Dynamics 22, no. 2 (2011): 151–61. https://doi.org/10.1016/j.strueco.2010.12.004.

Ross, Michael Lewin. The Oil Curse : How Petroleum Wealth Shapes the Development of Nations. Princeton, N.J: Princeton University Press, 2012.

Shu Yang, Elyas Abdulahi, Muhammad Afaq Haider, and Muhammed Asif Khan. “Revisiting the Curse: Resource Rent and Economic Growth of Sub-Sahara African Countries.” International Journal of Economics and Financial Issues 9, no. 1 (2019): 121–30.

Venables, Anthony. “Using Natural Resources for Development: Why Has It Proven So Difficult?” Journal of Economic Perspectives, 30 no.1 (2016): 161-184. https://www.aeaweb.org/articles?id=10.1257/jep.30.1.161.

Wang, Rong, Junlan Tan, and Shuangliang Yao. “Are Natural Resources a Blessing or a Curse for Economic Development? The Importance of Energy Innovations.” Resources Policy 72 (2021): 102042–. https://doi.org/10.1016/j.resourpol.2021.102042.

Williams, Andrew. “Shining a Light on the Resource Curse: An Empirical Analysis of the Relationship Between Natural Resources, Transparency, and Economic Growth.” World Development 39, no. 4 (2011): 490–505. https://doi.org/10.1016/j.worlddev.2010.08.015.

Sources for Data¶

Venables - Appendix Data
World Bank - GDP growth Data
World Bank - GDP per capita Data
World Bank - Oil Rents as % of GDP
World Bank - Total Exports as % of GDP
World Bank - Total Natural Resources Rents as % of GDP
OEC - Export information